﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Reflection;

namespace DECOR.Touchapp
{
    public partial class guardarDocumento : System.Web.UI.Page
    {
        PedidoBE pObjPedido = null;

        private List<GenericBE> _lvLstCentros = new List<GenericBE>();
        private List<GenericBE> _lvLstAlmacenes = new List<GenericBE>();
        private List<GenericBE> _lvLstLotes = new List<GenericBE>();
        private List<StockBE> _lvLstCAL = new List<StockBE>();
        private string _lvCALSessKey = string.Empty;
        private readonly string _lvPreCALSessKey = "LstCAL";

        string op = "";
        string pRetval = "";
        string retval = "";
        string gvSectorVal = "00";
        string gvGrpVendVal = "100";

        //cabecera pedido
        string CodTipoDoc = "";
        string Correo = "";
        string TipoVisita = "";
        string DescripcionTipoVisita = "";
        string ContactoVisita = "";
        string TelefonosVisita = "";
        string RefDireccion = "";
        string Npisos = "";
        string chkAscensor = ""; //Convertirlo a Boolean
        string CodVendedor1 = "";
        string CondPago = ""; //viene de un combobox condiciones de pago
        string Motivo = ""; //viene de un combobox motivo
        string NomSolicitante = "";
        string CodpSolicitante = ""; //Código postal solicitante
        string NomResPago = "";
        string CodpResPago = ""; //Código postal responsable pago
        string Total = "";
        string OrgVentas = "";
        string CanalDist = "";
        string DirDestMerc = "";
        string FechaFact = "";
        string numPedido = "";
        string pLista = string.Empty;
        string json = "";
        string planFact = "";
        //detalle pedido
        string pPedTotal = string.Empty;
        string pListaMat = string.Empty;
        string pListaPed = string.Empty;
        string pListaDes = string.Empty;
        string pListaRep = string.Empty;
        string pListaInt = string.Empty;
        string pListaDatoCli = string.Empty;
        string mensajeExcepcion = string.Empty;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Request.HttpMethod.Equals("POST"))
            {

            }
            else
            {
                CredencialesController.cargarInfo(Request.Params); //(SIEMPRE)
                numPedido = Request.Params["numPedido"] != null ? Request.Params["numPedido"] : "";
                planFact = Request.Params["planFact"] != null ? Request.Params["planFact"] : "";
                pListaDatoCli = Request.Params["listadatosCliente"] != null ? Request.Params["listadatosCliente"] : "";
                pListaMat = Request.Params["listaMatJson"] != null ? Request.Params["listaMatJson"] : "";
                pListaPed = Request.Params["listaPedJson"] != null ? Request.Params["listaPedJson"] : "";
                pListaDes = Request.Params["listaDsctoJson"] != null ? Request.Params["listaDsctoJson"] : "";
                pListaRep = Request.Params["listaRepJson"] != null ? Request.Params["listaRepJson"] : "";
                pListaInt = Request.Params["listaIntJson"] != null ? Request.Params["listaIntJson"] : "";
                pPedTotal = Request.Params["pPedTotal"] != null ? Request.Params["pPedTotal"] : "";
                op = Request.Params["op"] != null ? Request.Params["op"] : "";

                switch (op.ToLower())
                {
                    case "crear":
                        op = "crear";
                        break;
                    case "ref":
                        op = "copiar";
                        break;
                    case "mod":
                        op = "editar";
                        break;
                }

                if (string.IsNullOrEmpty(numPedido))
                {
                    //guardamos un nuevo pedido, por que el parametro viene vacio o es nulo
                    pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"op\": \"{2}\", ";
                    pRetval += "\"numPedido\": \"{3}\" ";
                    pObjPedido = Convertir_Cadena_a_Pedido(pListaPed, pListaInt, pListaRep, pListaDes, pListaMat);
                    pObjPedido.CodGrupoVend = gvGrpVendVal;
                    ActualizarPrecios(pObjPedido);
                    //BuscarPrecios(pObjPedido);
                    GuardarPedido(pObjPedido);
                    
                    if (pObjPedido.CodTipoDoc == "Z004")
                    {
                        pRetval += ", ";
                        planFacturacionTotal(pObjPedido);
                    }
                    else
                    {
                        pRetval += "}";
                    }
                }
                else
                {
                    pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"op\": \"{2}\", ";
                    pRetval += "\"numPedido\": \"{3}\" ";
                    
                    pObjPedido = Convertir_Cadena_a_Pedido(pListaPed, pListaInt, pListaRep, pListaDes, pListaMat);
                    ActualizarPrecios(pObjPedido);
                    //BuscarPrecios(pObjPedido);
                    GuardarPedido(pObjPedido);
                    if (pRetval.Trim() != "")
                    {
                        string[] resultado = pRetval.Split(',');
                        if (resultado[0].Substring(12, resultado[0].Length - 12).Trim() != "false") 
                        {
                            if (pObjPedido.CodTipoDoc == "Z004")
                            {
                                pRetval += ", ";
                                planFacturacionTotal(pObjPedido);
                            }
                            else
                            {
                                pRetval += "}";
                            }
                        }
                        else
                        {
                            pRetval += "}";
                        }
                    }     
                }

                Response.ContentType = "application/json; charset=UTF-8";
                Response.Write(pRetval);
            }
        }

        private void GuardarPedido(PedidoBE _objPed)
        {
            PedidoBE _lvObjPedido = _objPed;

            bool pedConMatServ = false;
            bool pasa = true;
            string strMsg = "";
            string coma = "";
            bool tienetipo = true;

            if (_lvObjPedido.codVersion != null)
            {

                if (_lvObjPedido.codVersion.Length > 4)
                {
                    pasa = false;
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "El campo Cod Version no debe pasar de 4 digitos");
                    pRetval = pRetval.Replace("{2}", op);
                    pRetval = pRetval.Replace("{3}", "00000000");
                    return;

                }
                else
                {

                    for (int x = 0; x <= _lvObjPedido.codVersion.Length - 1; x++)
                    {
                        if (!char.IsDigit(_lvObjPedido.codVersion[x]))
                        {
                            pasa = false;
                            pRetval = pRetval.Replace("{0}", "false");
                            pRetval = pRetval.Replace("{1}", "El campo Cod Version debe ser numerico");
                            pRetval = pRetval.Replace("{2}", op);
                            pRetval = pRetval.Replace("{3}", "00000000");
                            return;
                        }
                    }
                }

            }
            if (ParametroBC.Instance.esTipoOferta(_lvObjPedido.CodTipoDoc) && (_lvObjPedido.Mail.Equals("")) && (!_lvObjPedido.CodTipoDoc.Equals("Z004")))
            {
                pasa = false;
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", ParametroBC.Instance.getParamValue("msgErrCorreo"));
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return;
            }

            try { DescripcionTipoVisita = _lvObjPedido.Textos.Find(x => x.CodTexto == ParametroBC.Instance.getParamValue("TextoDescripVisita")).Descripcion; } catch { }
            try { ContactoVisita = _lvObjPedido.Textos.Find(x => x.CodTexto == ParametroBC.Instance.getParamValue("TextoContactoVisita")).Descripcion; } catch { }
            try { TelefonosVisita = _lvObjPedido.Textos.Find(x => x.CodTexto == ParametroBC.Instance.getParamValue("TextoTelefonoVisita")).Descripcion; } catch { }
            try { RefDireccion = _lvObjPedido.Textos.Find(x => x.CodTexto == "ZP07").Descripcion; } catch { }
            

            if ((_lvObjPedido.CodTipoDoc.Equals("Z036") || _lvObjPedido.CodTipoDoc.Equals("Z037")) &&
                 (((_lvObjPedido.TipoVisita.Equals("") || DescripcionTipoVisita.Equals("")) && _lvObjPedido.CodTipoDoc.Equals("Z036")) ||
                 (ContactoVisita.Equals("") || TelefonosVisita.Equals("") || RefDireccion.Equals(""))))
            {
                if (_lvObjPedido.TipoVisita.Equals("") && _lvObjPedido.CodTipoDoc.Equals("Z036"))
                {
                    pasa = false;
                    tienetipo = false;
                }
                //Contacto, Teléfono,	Referencia de dirección, Descripción de la visita.
                if (ContactoVisita.Equals(""))
                {
                    if (!strMsg.Equals("")) coma = ", ";
                    strMsg = "Contacto";
                }
                if (TelefonosVisita.Equals(""))
                {
                    if (!strMsg.Equals("")) coma = ", ";
                    strMsg = strMsg + coma + "Teléfono ";
                    coma = "";
                }
                if (CodTipoDoc.Equals("Z036")) //mtejada 21.11.2011
                {
                    if (DescripcionTipoVisita.Equals(""))
                    {
                        if (!strMsg.Equals("")) coma = ", ";
                        strMsg = strMsg + coma + "Descripción de la visita";
                        coma = "";
                    }
                }
                if (RefDireccion.Equals(""))
                {
                    if (!strMsg.Equals("")) coma = ", ";
                    strMsg = strMsg + coma + "Referencia de dirección ";
                    coma = "";
                }
                if (!strMsg.Equals("") || !tienetipo)
                {
                    pasa = false;
                    strMsg = ParametroBC.Instance.getParamValue("msgErrVisitaTextos1") + strMsg;
                    if (!tienetipo && !strMsg.Equals(""))
                    {
                        strMsg = ParametroBC.Instance.getParamValue("msgErrVisitaTextos2") + " " + strMsg;
                    }
                    else if (!tienetipo && strMsg.Equals(""))
                    {
                        strMsg = ParametroBC.Instance.getParamValue("msgErrVisitaTextos2");
                    }
                }
            }

            if (pasa)
            {
                //if (op != "editar" || op != "ver")
                //{
                //    //si referencia tiene un valor, entonces es una copia.
                //    if (_objPed.Referencia != "" && _objPed.Referencia != "0000000000")
                //    {
                //        op = "copiar";
                //    }
                //}                

                if (!(op.Equals("editar")))
                {
                    if (!documentoValido(op, _objPed))
                    {
                        //enviar mensaje si el documento no es valido
                        return;
                    }
                }
                //VALIDANDO INERLOCUTOR Z3
                InterlocutorBE objIntZ3 = new InterlocutorBE();
                objIntZ3 = _objPed.Interlocutores.Find(x => x.Funcion == "Z3");

                if (objIntZ3 != null)
                {
                    if (objIntZ3.Cliente.Codigo != "")
                    {
                        List<ClienteBE> lstCZ3 = null;
                        if (objIntZ3.Cliente.Ruc == null || objIntZ3.Cliente.Ruc == "")
                        {
                            lstCZ3 = ValidaInterlocutorZ3("", "", objIntZ3.Cliente.Codigo);
                            if (lstCZ3 == null || lstCZ3.Count == 0)
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "El interlocutor Ag. Transporte ingresado no existe.");
                                pRetval = pRetval.Replace("{2}", op);
                                pRetval = pRetval.Replace("{3}", "00000000");
                                return;
                            }
                            else if (lstCZ3.Count > 1)
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", "Se encontraron mas de una coincidencia para el interlocutor Ag. Transporte.");
                                pRetval = pRetval.Replace("{2}", op);
                                pRetval = pRetval.Replace("{3}", "00000000");
                                return;
                            }
                            else
                            {
                                objIntZ3.Cliente = lstCZ3[0];
                                _objPed.Interlocutores.Remove(objIntZ3);
                                _objPed.Interlocutores.Add(objIntZ3);
                            }
                        }
                    }

                } 
                //--validar rendimiento antes de grabar
                if (_objPed.CodTipoDoc != ParametroBC.Instance.getParamValue("CodMuestraGratis") &&
                        _objPed.CodTipoDoc != ParametroBC.Instance.getParamValue("CodMuestraGarantia"))
                {
                    //--- rendimiento
                    foreach (DetalleBE objDetalle in _objPed.Detalle)
                    {
                        if (objDetalle.CodCentro.TrimStart('0') == "9160")
                        {
                            //pRetval = pRetval.Replace("{0}", "false"); comentado 23.04.2013
                            //pRetval = pRetval.Replace("{1}", "No se permite asignar stock del 9160:LIMASA."); comentado 23.04.2013
                            //return; comentado 23.04.2013
                        }
                        MaterialBE objMat = null;
                        if (objDetalle.Material == null)
                        {
                            objMat = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, _objPed.OrgVentas, _objPed.CanalDist);
                        }
                        else
                        {
                            objMat = objDetalle.Material;
                        }
                        if (objMat != null &&
                            !ParametroBC.Instance.esTipoX(objMat.Tipo, "TipoMatServicio") &&
                            ParametroBC.Instance.esTipoX(objMat.UMedidaRendimiendo, "UMRendimiento"))
                        {
                            decimal nuevaCant = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                            objDetalle.Cantidad = nuevaCant;
                            if (objMat.TieneServ)
                            {
                                pedConMatServ = true;
                            }
                        }
                    }
                    //fecha de facturacion
                    if (!FechaFact.Equals(""))
                    {
                        pObjPedido.FechaFacturacion = DateTime.Parse(FechaFact);
                    }

                    //--- cambiar fecha de entrega
                    this.calculaFechaEntrega(_objPed, op); ;
                }
                //-------------------------------------
                bool modifOk = false;

                try
                {
                    //--- enviar lote en blanco si es oferta
                    if (ParametroBC.Instance.esTipoOferta(_objPed.CodTipoDoc))
                    {
                        //limpiar lotes si es oferta
                        List<DetalleBE> lstDetalle = new List<DetalleBE>();
                        foreach (DetalleBE detItem in _objPed.Detalle)
                        {
                            detItem.CodLote = "";
                            lstDetalle.Add(detItem);
                        }
                        _objPed.Detalle = lstDetalle;
                    }
                    //asignamos el sector 00
                    _objPed.Sector = gvSectorVal;
                    //*****************************************************************
                    //validamos el interlocutor VE y V2, solo uno de los dos se graba
                    if (op.Equals("copiar") || op.Equals("crear"))
                    {
                        string cod = "";
                        try
                        {
                            cod = pObjPedido.Interlocutores.Find(x => x.Funcion == "VE").Persona.CodPersona;
                        }
                        catch
                        {
                            cod = "";
                        }
                        try
                        {
                            if (cod.Trim() != "")
                            {
                                pObjPedido.Interlocutores.RemoveAll(x => x.Funcion == "V2");
                            }
                        }
                        catch { }
                    }
                    //*****************************************************************
                    switch (op.ToLower())
                    {
                        case "editar":
                            //pObjPedido.Mail = Correo;
                            retval = PedidoBC.Instance.modificar(out modifOk, _objPed);
                            break;
                        case "crear":
                        case "copiar":
                            _objPed.NumPedido = _objPed.Referencia;
                            retval = PedidoBC.Instance.procesarPedido(out numPedido, _objPed);

                            if (op.Equals("copiar") || op.Equals("crear")) //&& Session["planFact"] != null)
                            {
                                //((List<PlanFactBE>)Session["planFact"]).RemoveAll(x => x.TETXT.Equals("") || x.AFDAT.Year.Equals(1));
                                //if (((List<PlanFactBE>)Session["planFact"]).Count > 0)
                                //    PedidoBC.Instance.setPlanFact(numPedido, (List<PlanFactBE>)Session["planFact"], true);
                            }
                            break;
                    }
                }
                catch (Exception ex)
                {
                    //Session["Mensaje"] = ex.Message;
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", ex.Message);
                    pRetval = pRetval.Replace("{2}", op);
                    pRetval = pRetval.Replace("{3}", "00000000");
                }
                finally
                {
                    //verificar resultado:
                    if (!numPedido.Equals(""))
                    {
                        //--- poner nro de pedido generado en el campo num pedido
                        //txtNumPedido.Text = numPedido;
                        //Guardamos los datos del cliente, preguntas y respuestas
                        if (!ParametroBC.Instance.esTipoX(_objPed.CodTipoDoc, "CodNCND"))
                        {
                            mensajeExcepcion = "";
                            List<ClienteBE> lstCliPR = GuardarClienteReniec(pListaDatoCli, out mensajeExcepcion);
                            if (mensajeExcepcion == "")
                            {
                                ClienteBC.Instance.insertClientePregRep(lstCliPR);    
                            }
                            else
                            {
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", mensajeExcepcion);
                                pRetval = pRetval.Replace("{2}", op);
                                pRetval = pRetval.Replace("{3}", "00000000");
                            }
                        }
                        
                        //--- mostrar mensaje de creación
                        if (pedConMatServ)
                        {
                            retval += ParametroBC.Instance.getParamValue("msgPedConServ");
                        }

                        if (numPedido.TrimStart('0') != "" || numPedido.Trim() != "")
                        {
                            pRetval = pRetval.Replace("{0}", "true");
                            pRetval = pRetval.Replace("{1}", retval);
                            pRetval = pRetval.Replace("{2}", op);
                            pRetval = pRetval.Replace("{3}", numPedido);    
                        }
                        else
                        {
                            pRetval = pRetval.Replace("{0}", "false");
                            pRetval = pRetval.Replace("{1}", retval);
                            pRetval = pRetval.Replace("{2}", op);
                            pRetval = pRetval.Replace("{3}", "00000000");
                        }
                    }
                    else
                    {
                        retval = retval.Replace("\r\n", " ");
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", retval);
                        pRetval = pRetval.Replace("{2}", op);
                        pRetval = pRetval.Replace("{3}", "00000000");
                    }
                    //si es una edición de pedido y todo salió ok, retval viene vacío...
                    if (op.ToLower() == "editar")
                    {
                        if (modifOk)
                        {
                            if (pedConMatServ)
                            {
                                retval += ParametroBC.Instance.getParamValue("msgPedConServ");
                            }
                        }
                    }

                    pRetval = pRetval.Replace("{1}", retval);
                }
            }
            else
            {
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", strMsg);
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
            }
        }

        private bool documentoValido(string op, PedidoBE _objP)
        {
            if (ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodPedServ"))
            {
                bool tieneEstiba = false, estibaEspecial = false;
                foreach (DetalleBE objItem in pObjPedido.Detalle)
                {
                    if (objItem.Material.EspecialServ && objItem.Material.EsEstiba)
                    {
                        estibaEspecial = true;
                    }
                    if (objItem.Material.EsEstiba)
                    {
                        tieneEstiba = true;
                    }
                }
                if (tieneEstiba)
                {
                    //Validar máximo de pisos:
                    int maxPisos; int numPisos;
                    try
                    {
                        maxPisos = Convert.ToInt16(ParametroBC.Instance.getParamValue("MaxPisoSinAsc"));
                    }
                    catch { maxPisos = 0; }
                    try
                    {
                        numPisos = Convert.ToInt16(_objP.Znpiso);
                    }
                    catch { numPisos = 0; }

                    if (numPisos > maxPisos && !Convert.ToBoolean(_objP.Zasensor) && !estibaEspecial)
                    {
                        //Session["Mensaje"] = string.Format(ParametroBC.Instance.getParamValue("msgErrMaxPisos"), maxPisos.ToString());
                        //"Documento inválido, se excedió el número de pisos permitidos sin ascensor.";
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", string.Format(ParametroBC.Instance.getParamValue("msgErrMaxPisos"), maxPisos.ToString()));
                        pRetval = pRetval.Replace("{2}", op);
                        pRetval = pRetval.Replace("{3}", "00000000");
                        return false;
                    }
                    else if (numPisos <= 0m)
                    {
                        //Session["Mensaje"] = string.Format(ParametroBC.Instance.getParamValue("msgErrEstiba"));
                        //"Documento inválido, debe indicar el número de pisos para realizar la estiba.";
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", string.Format(ParametroBC.Instance.getParamValue("msgErrEstiba")));
                        pRetval = pRetval.Replace("{2}", op);
                        pRetval = pRetval.Replace("{3}", "00000000");
                        return false;
                    }
                }
            }
            try
            {
                CodVendedor1 = _objP.Interlocutores.Find(x => x.Funcion == "VE").Persona.CodPersona;
            }
            catch 
            {
                
            }
            
            if (CodVendedor1.Equals("") && !op.ToLower().Equals("editar") && !ParametroBC.Instance.esTipoX(CodTipoDoc, "CodNCND"))
            {
                //Session["Mensaje"] = "Documento inválido, no se ha especificado el Vendedor.";
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "Documento inválido, no se ha especificado el Vendedor.");
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return false;
            }

            if (_objP.CondPago == "")
            {
                //Session["Mensaje"] = "Documento incompleto, por favor ingrese la cond. de pago";
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "Documento incompleto, por favor ingrese la cond. de pago");
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return false;
            }

            //--- valida motivo de pedido si es NC o ND
            if (string.IsNullOrEmpty(_objP.Motivo) &&
                ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodNCND"))
            {
                //Session["Mensaje"] = "Documento incompleto, por favor ingrese el motivo de pedido.";
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "Documento incompleto, por favor ingrese el motivo de pedido.");
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return false;
            }

            //--- validar interlocutores...
            NomSolicitante = _objP.Interlocutores.Find(x => x.Funcion == "AG").Cliente.Descripcion;
            CodpSolicitante = _objP.Interlocutores.Find(x => x.Funcion == "AG").Cliente.CodigoPostal;
            NomResPago = _objP.Interlocutores.Find(x => x.Funcion == "RG").Cliente.Descripcion;
            CodpResPago = _objP.Interlocutores.Find(x => x.Funcion == "RG").Cliente.CodigoPostal;

            if (NomSolicitante.Equals("") || CodpSolicitante.Equals("") || NomResPago.Equals("") || CodpResPago.Equals(""))
            {
                //Session["Mensaje"] = "Documento incompleto, debe ingresar al menos el Nombre y Código postal del Solicitante/Resp. Pago";
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "Documento incompleto, debe ingresar al menos el Nombre y Código postal del Solicitante/Resp. Pago");
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return false;
            }

            string total = pPedTotal;
            decimal totalnuevo;
            if(_objP.CodTipoDoc == "Z035"){
                totalnuevo = Convert.ToDecimal(total);
            }
            else{
                totalnuevo = _objP.TotalImp == 0 ? _objP.Total : _objP.TotalImp;
            }

            if ((string.IsNullOrEmpty(totalnuevo.ToString()) || Convert.ToDecimal(totalnuevo) <= 0m) &&
                _objP.CodTipoDoc != ParametroBC.Instance.getParamValue("CodReserva"))
            {
                //Session["Mensaje"] = "Documento inválido, total del documento no puede ser menor o igual a cero";
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "Documento inválido, total del documento no puede ser menor o igual a cero.");
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return false;
            }
            //************************************************************************************************************+
            //rhuapaya 28.06.2012 @@@ se agrego la validación 
            //En el pedido de venta, canal corporativo, debe ingresarse  el nombre del proyecto y la atención  en las observaciones (obligatorio)
            if (!ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodServicios"))
            {
                if (_objP.nomProyecto == "" && _objP.CanalDist == "30")
                {
                    pRetval = pRetval.Replace("{0}", "false");
                    pRetval = pRetval.Replace("{1}", "Documento inválido, ingrese el nombre del proyecto.");
                    pRetval = pRetval.Replace("{2}", op);
                    pRetval = pRetval.Replace("{3}", "00000000");
                    return false;
                }
                try
                {
                    string atencion = _objP.Textos.Find(x => x.CodTexto == "ZP01").Descripcion;
                    if (atencion == "" && _objP.CanalDist == "30")
                    {
                        pRetval = pRetval.Replace("{0}", "false");
                        pRetval = pRetval.Replace("{1}", "Documento inválido, ingrese una descripción de atención en las observaciones.");
                        pRetval = pRetval.Replace("{2}", op);
                        pRetval = pRetval.Replace("{3}", "00000000");
                        return false;
                    }
                }
                catch
                {
                    
                }
            }
                      
            //************************************************************************************************************+
            string retMsg = "";
            foreach (DetalleBE objItem in _objP.Detalle)
            {
                if (objItem.CodCentro.TrimStart('0') == "9160")
                {
                    //retMsg += "No se permite asignar stock del 9160:LIMASA."; comentado 23.04.2013
                    //break; comentado 23.04.2013
                }
                if (!ParametroBC.Instance.esTipoPosCombo(objItem.TipoPosicion))
                {
                    //-- Limitación de prioridad de entrega para canal 10 y vkorg 1000
                    if (_objP.OrgVentas == "1000" && _objP.CanalDist == "10" &&
                        ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodSinDesp"))
                    {
                        if (objItem.PrioridadEntrega != "03" && objItem.PrioridadEntrega != "04")
                        {
                            retMsg += string.Format(ParametroBC.Instance.getParamValue("msgLprioCanal"), objItem.Posicion, _objP.CanalDist);
                            break;
                        }
                    }
                    if (objItem.Cantidad <= 0)
                    {
                        retMsg += string.Format(ParametroBC.Instance.getParamValue("msgCantMCero"), objItem.Posicion);
                        break;
                    }
                    decimal pSubtotal = objItem.TotalImpresion == 0 ? objItem.Total : objItem.TotalImpresion;
                    if (pSubtotal <= 0m && !ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodReserva"))
                    {
                        retMsg += string.Format("- Subtotal en posición {0} no puede ser menor o igual a cero.", objItem.Posicion);
                        break;
                    }
                    //----
                    string DirDestMerc = "";
                    if (_objP.Interlocutores.Find(x => x.Funcion == "WE") != null)
                    {
                        DirDestMerc = _objP.Interlocutores.Find(x => x.Funcion == "WE").Cliente.Direccion;    
                    }
                    
                    if (ParametroBC.Instance.esTipoX(objItem.PrioridadEntrega, "CodDespacho")
                        && DirDestMerc.Trim().Equals("") && !ParametroBC.Instance.esTipoOferta(_objP.CodTipoDoc))
                    {
                        retMsg += string.Format("- Debe especificar la dirección del Dest. de Mercancías para realizar la entrega de la posición {0}.", objItem.Posicion);
                        break;
                    }
                    //----
                    if (objItem.PrioridadEntrega == "" && !ParametroBC.Instance.esTipoOferta(_objP.CodTipoDoc) &&
                        !ParametroBC.Instance.esTipoServicio(_objP.CodTipoDoc) && !ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodNCND") &&
                        !ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodReserva") && !_objP.CodTipoDoc.Equals("Z037") &&
                        !_objP.CodTipoDoc.Equals("Z036"))
                    {
                        retMsg += string.Format("- Falta especificar la Prioridad de Entrega en posición {0}.", objItem.Posicion);
                        break;
                    }

                    if (string.IsNullOrEmpty(objItem.CodLote) &&
                        ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "VtaConStock") &&
                        !ParametroBC.Instance.esTipoOferta(_objP.CodTipoDoc) && !ParametroBC.Instance.esTipoX(_objP.CodTipoDoc, "CodNCND") &&
                        !ParametroBC.Instance.esTipoSinLote(_objP.CodTipoDoc))
                    {
                        if (objItem.Material.TipoMaterial.Equals("NA1"))
                        {
                            retMsg += string.Format(" {0}" + ParametroBC.Instance.getParamValue("msjErrorNA1SS") + " ", objItem.Material.CodMaterialCorto);
                        }
                        else
                        {
                            retMsg += string.Format("- Falta especificar el Lote en posición {0}. ", objItem.Posicion);
                        }
                        break;
                    }
                }
            }
            if (retMsg != string.Empty)
            {
                //Session["Mensaje"] = retMsg;
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", retMsg);
                pRetval = pRetval.Replace("{2}", op);
                pRetval = pRetval.Replace("{3}", "00000000");
                return false;
            }

            return true;
        }

        /// <summary>
        /// función para calcular la fecha de entrega en base a la prioridad de entrega
        /// </summary>
        /// <param name="pObjPedido">Datos del pedido</param>
        private void calculaFechaEntrega(PedidoBE pObjPedido, string op)
        {
            foreach (DetalleBE objDetalle in pObjPedido.Detalle)
            {
                this.calculaFechaEntregaItem(objDetalle, op);
            }
        }

        private void calculaFechaEntregaItem(DetalleBE objDetalle, string op)
        {
            DateTime fechaCalculada, fechaActual = DateTime.Today;
            double factor = 0;
            //----
            if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas2"))
            {
                factor = 2;
            }
            else if (ParametroBC.Instance.esTipoX(objDetalle.PrioridadEntrega, "CodPrioEntMas1"))
            {
                factor = 1;
            }
            else
            {
                factor = 0;
            }
            //-----
            int count = Convert.ToInt32(factor);
            //Si es domingo pasa como si fuera lunes
            if (fechaActual.DayOfWeek == DayOfWeek.Sunday)
            {
                count += 1;
            }
            fechaCalculada = fechaActual;
            for (int i = 1; i <= count; i++)
            {
                if (op.Equals("crear"))
                {
                    fechaCalculada = fechaCalculada.AddDays(1);
                    if (fechaCalculada.DayOfWeek == DayOfWeek.Sunday)
                    {
                        fechaCalculada = fechaCalculada.AddDays(1);
                    }
                }
            }
            //--- múltiples fechas de reparto:
            if (objDetalle.Repartos.Count == 0)
            {
                objDetalle.Repartos.Add(new RepartoBE());
            }
            foreach (RepartoBE itmRep in objDetalle.Repartos)
            {
                if (fechaCalculada > itmRep.FechaEntrega && op.Equals("crear"))//mtejada
                {
                    itmRep.FechaEntrega = fechaCalculada;
                }
                else if (itmRep.FechaEntrega.DayOfWeek == DayOfWeek.Sunday)
                {
                    itmRep.FechaEntrega = itmRep.FechaEntrega.AddDays(1);
                }
            }
        }
        
        private PedidoBE Convertir_Cadena_a_Pedido(string _CabPedido, string _interlocutores, string _repartos,
            string _descuentos, string _detMateriales)
        {
            PedidoBE _objP = new PedidoBE();

            List<PedidoBE> objPedido = JsonConvert.DeserializeObject<List<PedidoBE>>(_CabPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            List<DetalleBE> lstMater = JsonConvert.DeserializeObject<List<DetalleBE>>(_detMateriales);
            List<DescuentoBE> lstDscto = JsonConvert.DeserializeObject<List<DescuentoBE>>(_descuentos);
            List<RepartoBE> lstRepar = JsonConvert.DeserializeObject<List<RepartoBE>>(_repartos);
            List<InterlocutorBE> lstInter = JsonConvert.DeserializeObject<List<InterlocutorBE>>(_interlocutores);
            List<MaterialBE> lstDetMater = JsonConvert.DeserializeObject<List<MaterialBE>>(_detMateriales);
            List<ClienteBE> lstCliTmp = JsonConvert.DeserializeObject<List<ClienteBE>>(_interlocutores);
            List<PersonaBE> lstPerTmp = JsonConvert.DeserializeObject<List<PersonaBE>>(_interlocutores);

            foreach (InterlocutorBE item in lstInter)
            {
                foreach (ClienteBE itemc in lstCliTmp)
                {
                    if (item.Funcion == itemc.Funcion)
                    {
                        item.Cliente = itemc;
                        break;
                    }
                }

                foreach (PersonaBE itemp in lstPerTmp)
                {
                    if (item.Funcion == itemp.Funcion)
                    {
                        item.Persona = itemp;
                        break;
                    }
                }
            }
            
            #region Descuentos
            foreach (DetalleBE itemD in lstMater)
            {
                foreach (DescuentoBE item in lstDscto)
                {
                    if (itemD.PosicionCorto.TrimStart('0') == item.Posicion || itemD.PosicionCorto.TrimStart('0') == item.matPosicion)
                    {
                        if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                        {
                            itemD.DctoDecorPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                        {
                            itemD.DctoAdicionalPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                        {
                            itemD.DctoEstadisticoPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                        {
                            itemD.DctoGerenciaPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                        {
                            itemD.DctoGerenciaMonto = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondZD06"))
                        {
                            itemD.DctoZD06 = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctos")) //ZD09
                        {
                            itemD.DctoGenerico = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondZD11"))
                        {
                            itemD.DctoZD11 = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctosAdicional"))
                        {
                            itemD.DsctoAdicionalZD12 = item;
                        }
                        else if (item.Condicion == "ZP08")
                        {
                            itemD.PreZP08 = item;
                        }
                        else if (item.Condicion == "ZP01")
                        {
                            itemD.Diferencia = item;
                        }
                    }
                }
            }
            #endregion

            #region Repartos
            //primero eliminamos los repartos que vienen por defecto en la lista de material
            for (int i = 0; i < lstMater.Count; i++)
            {
                lstMater[i].Repartos.RemoveAt(0);
            }

            foreach (DetalleBE itemD in lstMater)
            {
                foreach (RepartoBE itemR in lstRepar)
	            {
                    if (itemD.PosicionCorto.TrimStart('0') == itemR.matPosicion.TrimStart('0'))
                    {
                        itemD.Repartos.Add(itemR);
                        break;
                    }	 
	            }
            }
            #endregion

            #region Textos
            //leemos los textos de la cadena _CabPedido
            List<TextoBE> lstTexto = new List<TextoBE>();
            List<TextoBE> lstTextoTmp = new List<TextoBE>();
            TextoBE objtxt = new TextoBE();
            lstTexto = JsonConvert.DeserializeObject<List<TextoBE>>(_CabPedido);

            foreach (TextoBE item in lstTexto)
            {
                if (item.textoAtencion != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP01";
                    objtxt.Descripcion = item.textoAtencion.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoObsAdministrativas != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP05";
                    objtxt.Descripcion = item.textoObsAdministrativas.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoRefFactura != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP06";
                    objtxt.Descripcion = item.textoRefFactura.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoRefDireccion != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP07";
                    objtxt.Descripcion = item.textoRefDireccion.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoContacto != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoContactoVisita");
                    objtxt.Descripcion = item.textoContacto.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoDatosAdicionalesCliente != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoDatosAdicVisita");
                    objtxt.Descripcion = item.textoDatosAdicionalesCliente.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoTelefonos != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoTelefonoVisita");
                    objtxt.Descripcion = item.textoTelefonos.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoDescripcionVisita != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoDescripVisita");
                    objtxt.Descripcion = item.textoDescripcionVisita.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                if (item.textoResultadoVisita != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoResultadoVisita");
                    objtxt.Descripcion = item.textoResultadoVisita.Trim();
                    lstTextoTmp.Add(objtxt);
                }
            }       
            #endregion

            //Precio del detalle ZP00
            foreach (DetalleBE item in lstMater)
            {
                foreach (DescuentoBE itemD in lstDscto)
                {
                    if (item.PosicionCorto.TrimStart('0') == itemD.matPosicion)
                    {
                        if (itemD.Condicion == "ZP00" || itemD.Condicion == "ZP07")
                        {
                            item.Precio = itemD;
                        }
                        else if (itemD.Condicion == "ZP03")
                        {
                            item.Precio = itemD;
                        }
                    }
                }
            }
            //asignamos material a detalle
            foreach (DetalleBE item in lstMater)
            {
                foreach (MaterialBE itemM in lstDetMater)
                {
                    if (item.CodMaterialCorto == itemM.CodMaterial)
                    {
                        item.Material = itemM;
                        break;
                    }
                }
            }

            //verificar y guardar el nombre del cliente con el de cliente reniec para que se guarde lo mismo
            ClienteBE clTmp = JsonConvert.DeserializeObject<ClienteBE>(pListaDatoCli);
            if (clTmp != null)
            {
                foreach (InterlocutorBE item in lstInter)
                {
                    if (item.Cliente.Descripcion.Trim() == clTmp.NOMBRE.Trim())
                    {
                        item.Cliente.Descripcion = clTmp.NOMBRE + " " + clTmp.APPAT + " " + clTmp.APMAT;
                    }
                }    
            }
            

            objPedido[0].Textos = lstTextoTmp;
            _objP = objPedido[0];
            _objP.Detalle = lstMater;
            _objP.Interlocutores = lstInter;

            return _objP;
        }

        private void ActualizarPrecios(PedidoBE _objPed)
        {            
            if (!ParametroBC.Instance.esTipoX(_objPed.CodTipoDoc, "CodMuestraGratis") &&
                !ParametroBC.Instance.esTipoX(_objPed.CodTipoDoc, "CodMuestraGarantia"))
            {
                foreach (DetalleBE item in _objPed.Detalle)
                {
                    if (item.Material.CodMaterial == null)
                    {
                        item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, _objPed.OrgVentas, _objPed.CanalDist);
                    }
                    //si UM = UNidad => redondear al entero mayor
                    if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                    {
                        item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                    }
                    //--- calcular rendimiento
                    if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                        ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                    {
                        if (!ParametroBC.Instance.esTipoX(pObjPedido.CodTipoDoc, "CodNCND"))
                        {
                            item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                        }
                        
                    }
                }
            }

            PedidoBC.Instance.ActualizarPosiciones(_objPed);
        }

        private PedidoBE BuscarPrecios(PedidoBE _objPed)
        {
            PedidoBE _lvObjPedido = _objPed;
            // valida q hayan datos necesarios
            if (!gvGrpVendVal.Equals(string.Empty) && int.Parse(_objPed.CodOficina) >= 0 &&
                !_objPed.CodTipoDoc.Trim().Equals("") && int.Parse(_objPed.OrgVentas) >= 0 &&
                int.Parse(_objPed.CanalDist) >= 0 && !_objPed.CodCliente.Trim().Equals(""))
            {
                PedidoBC objPBC = PedidoBC.Instance;
                //if (hidDescuentoTotal.Value != "")
                //{
                //    objPBC.DescuentoTotal = Convert.ToDecimal(hidDescuentoTotal.Value);
                //}
                string retMsg = objPBC.cargarCondiciones(ref _lvObjPedido);

                if (retMsg != string.Empty)
                {
                    //Session["Mensaje"] = retMsg;
                }
                else
                {
                    
                }
            }

            return _lvObjPedido;
        }

        private void TraerStock(PedidoBE _objPed, List<DetalleBE> _objDet)
        {
            string numPedidoModif = string.Empty;
            string numPosModif = string.Empty;

            foreach (DetalleBE item in _objDet)
            {
                if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                {
                    numPedidoModif = _objPed.NumPedido;
                    numPosModif = item.Posicion;
                }
                //--------------------------
                this._lvLstCentros = new List<GenericBE>();
                this._lvLstAlmacenes = new List<GenericBE>();
                this._lvLstLotes = new List<GenericBE>();
                
                decimal pCantTot = _objDet.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(item.Posicion))
                                                            && (X.CodMaterial == item.CodMaterial)
                                                            && (X.CodAlmacen == item.CodAlmacen)
                                                            && (X.CodCentro == item.CodCentro)
                                                            && (X.CodLote == item.CodLote)).Sum(Y => Y.Cantidad);
                pCantTot += item.Cantidad;
                this._lvLstCAL = ParametroBC.Instance.getDataLotes(item.Material.CodMaterial, pCantTot, string.Empty,
                        string.Empty, string.Empty, numPedidoModif, numPosModif, _objPed.OrgVentas, _objPed.CanalDist);
                _lvCALSessKey = _lvPreCALSessKey + item.PosicionCorto;
                
                DistribuirCAL(item.CodCentro, item.CodAlmacen, _lvLstCAL, ref _lvLstCentros, ref _lvLstAlmacenes, ref _lvLstLotes);
            }
        }

        /// <summary>
        /// nuevo método para distribuir StockBE en CAL
        /// </summary>
        /// <param name="selCentro">Centro seleccionado</param>
        /// <param name="selAlm">Alm seleccionado</param>
        /// <param name="list">lista stockbe</param>
        /// <param name="lstCentro">ref lista centro</param>
        /// <param name="lstAlmacen">ref lista alm</param>
        /// <param name="lstLote">ref lista lot</param>
        private void DistribuirCAL(string selCentro, string selAlm, List<StockBE> list, ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote)
        {
            lstCentro.Clear(); lstAlmacen.Clear(); lstLote.Clear();
            string charSep = ParametroBC.Instance.getParamValue("charSep");
            GenericBE objItem, objAux;
            List<StockBE> lstAux;

            //Añadir todos los centros
            foreach (StockBE obj in list)
            {
                objAux = null;
                objAux = lstCentro.Find(X => X.Codigo == obj.CodCentro);
                if (objAux == null)
                {
                    objAux = new GenericBE();
                    objAux.Codigo = obj.CodCentro;
                    objAux.Descripcion = obj.CodCentro + charSep + obj.DescCentro;
                    lstCentro.Add(objAux);
                }
            }
            if (string.IsNullOrEmpty(selCentro) && lstCentro.Count > 0)
            {
                selCentro = lstCentro[0].Codigo;
            }
            //Añadir almacenes para el centro
            lstAux = list.FindAll(X => X.CodCentro == selCentro);
            foreach (StockBE obj in lstAux)
            {
                objAux = null;
                objAux = lstAlmacen.Find(X => X.Codigo == obj.CodAlmacen);
                if (objAux == null)
                {
                    objAux = new GenericBE();
                    objAux.Codigo = obj.CodAlmacen;
                    objAux.Descripcion = obj.DescAlmacen; //obj.CodAlmacen + charSep + obj.DescAlmacen;
                    lstAlmacen.Add(objAux);
                }
            }
            if (string.IsNullOrEmpty(selAlm) && lstAlmacen.Count > 0)
            {
                selAlm = lstAlmacen[0].Codigo;
            }
            //Añadir lotes para el centro/almacen
            //rgutierrez 29.12.2011
            lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && !ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial"));
            //lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty));

            //ordenar de menor a mayor para dejar el lote óptimo en la primera posición
            lstAux.Sort(delegate(StockBE p1, StockBE p2) { return p1.StockDisponible.CompareTo(p2.StockDisponible); });

            lstAux.AddRange(list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial")));

            foreach (StockBE obj in lstAux)
            {
                objAux = new GenericBE();
                objAux.Codigo = obj.CodLote;
                objAux.Descripcion = obj.CodLote + charSep + "Stk = " + string.Format("{0:0,0.0}", obj.StockDisponible);

                lstLote.Add(objAux);
            }
        }

        //*********************************Plan de Facturacion*****************************************

        string pNumPedido = "";
        string pPlanFacturacion = ""; //lista de plan de facturacion, desde sencha se envia como objeto
        string Json = "";
        List<PlanFactBE> lstPlanFact = new List<PlanFactBE>();
        decimal pTotal = 0m;

        private void planFacturacionTotal(PedidoBE objP)
        {
            //pNumPedido = numPedido != null ? numPedido : "";
            pPlanFacturacion = Request.Params["pPlanFacturacion"] != null ? Request.Params["pPlanFacturacion"] : "";
            pTotal = objP.Total; // Request.Params["pTotal"] != null ? Convert.ToDecimal(Request.Params["pTotal"]) : 0m;

            pRetval += "\"planFact\": {2}, \"CatFactBE\": {3} ";
            pRetval += "}";
            if (op == "editar")
            {
                CrearPlanFacturacion(objP.NumPedido, false);
                PlanFacturacion(objP.NumPedido);    
            }
            else if(op == "crear" || op == "copiar")
            {
                CrearPlanFacturacion(numPedido, true);
                PlanFacturacion(numPedido);
            }
            
        }

        private void CrearPlanFacturacion(string numPed, bool creacion)
        {
            List<PlanFactBE> planFact = new List<PlanFactBE>();
            List<PlanFactBE> planFactTMP = new List<PlanFactBE>();

            if (pPlanFacturacion == null || pPlanFacturacion.Trim() == "")
            {
                numPedido = numPedido.PadLeft(10, '0');
                List<CatFactBE> CatFactBE = new List<CatFactBE>();
                planFactTMP = PedidoBC.Instance.getPlanFact(numPedido, out CatFactBE);
                               
                if (planFact != null)
                {
                    foreach (PlanFactBE item in planFactTMP)
                    {
                        item.TAXK1 = "D";                        
                    }
                }
                PedidoBC.Instance.setPlanFact(numPedido, planFactTMP, false); 
            }
            else
            {
                planFact = leerListaPlanFact(pPlanFacturacion);

                if (planFact == null || planFact.Count <= 0)
                {
                    numPedido = numPedido.PadLeft(10, '0');
                    List<CatFactBE> CatFactBE = new List<CatFactBE>();
                    planFactTMP = PedidoBC.Instance.getPlanFact(numPedido, out CatFactBE);

                    if (planFact != null)
                    {
                        foreach (PlanFactBE item in planFactTMP)
                        {
                            item.TAXK1 = "D";
                        }
                    }
                    PedidoBC.Instance.setPlanFact(numPedido, planFactTMP, false);

                }
                else
                {
                    numPedido = numPedido.PadLeft(10, '0');
                    List<CatFactBE> CatFactBETMP = new List<CatFactBE>();
                    planFactTMP = PedidoBC.Instance.getPlanFact(numPedido, out CatFactBETMP);
                    foreach (PlanFactBE item in planFactTMP)
                    {
                        item.TAXK1 = "D";
                    }
                    //Primero Eliminamos el plan de facturacion
                    PedidoBC.Instance.setPlanFact(numPedido, planFactTMP, false);
                    PedidoBC.Instance.setPlanFact(numPedido, planFact, false);
                    //ahora insertamos lo que vino desde sencha
                    //PedidoBC.Instance.getPlanFact(numPedido, out CatFactBETMP);
                    foreach (PlanFactBE item in planFact)
                    {
                        item.TAXK1 = "I";
                        item.FPLNR = "";
                        item.FKSAF = "A";
                    }
                    PedidoBC.Instance.setPlanFact(numPedido, planFact, true);
                }
            }
        }

        private void PlanFacturacion(string pNumPedido)
        {
            List<PlanFactBE> planFact = null;
            List<CatFactBE> CatFactBE;

            pNumPedido = pNumPedido.PadLeft(10, '0');
            CatFactBE = new List<CatFactBE>();
            planFact = PedidoBC.Instance.getPlanFact(pNumPedido, out CatFactBE);
            //adicionamos un item a la lista
            addItem(planFact);
            if (planFact != null)
            {
                Json = JsonConvert.SerializeObject(planFact);
                pRetval = pRetval.Replace("{0}", "true");
                pRetval = pRetval.Replace("{1}", "");
                pRetval = pRetval.Replace("{2}", Json);
                if (CatFactBE != null)
                {
                    Json = JsonConvert.SerializeObject(CatFactBE);
                    pRetval = pRetval.Replace("{3}", Json);
                }
                else
                {
                    pRetval = pRetval.Replace("{3}", "00000000");
                }
            }
            else
            {
                Json = JsonConvert.SerializeObject(planFact);
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "No se encontró información");
                pRetval = pRetval.Replace("{2}", "null");
                pRetval = pRetval.Replace("{3}", "00000000");
            }
        }

        private void addItem(List<PlanFactBE> _planFact)
        {
            List<PlanFactBE> planFact = null;
            planFact = _planFact;
            decimal porcentaje = 0;
            bool add = true;
            foreach (PlanFactBE pf in planFact)
            {
                porcentaje += decimal.Round(pf.FPROZ / 100, 3);
                add = planFact[planFact.Count - 1].FKDAT.Year.Equals(1) ? false : true;
            }
            if (porcentaje < 1 && add)
            {
                if (planFact == null)
                {
                    planFact = new List<PlanFactBE>();
                }
                PlanFactBE planFactBE = new PlanFactBE();

                if (planFact.Count == 0)
                {
                    planFactBE.FPROZ = 0;
                    planFactBE.FAKWR = planFactBE.FPROZ * pTotal;
                }
                else
                {
                    planFactBE.FPROZ = (1 - porcentaje) * 100;
                    planFactBE.FAKWR = (1 - porcentaje) * pTotal;
                }
                planFactBE.TAXK1 = "I";

                if (planFact.Count > 0)
                    planFactBE.FPLTR = (int.Parse(planFact[planFact.Count - 1].FPLTR) + 1).ToString().PadLeft(6, '0');
                else
                    planFactBE.FPLTR = "000001";

                planFact.Add(planFactBE);
            }
        }

        private List<PlanFactBE> leerListaPlanFact(string _listaPlanFact)
        {
            List<PlanFactBE> lstP = new List<PlanFactBE>();
            PlanFactBE objP = new PlanFactBE();
            lstP = JsonConvert.DeserializeObject<List<PlanFactBE>>(_listaPlanFact, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
                        
            return lstP;
        }

        private void ValidarLotePedido()
        {
            string numPedidoModif = string.Empty;
            string numPosModif = string.Empty;

            //*********************************************************************************************************
            foreach (DetalleBE objItem in pObjPedido.Detalle)
            {
                if (ParametroBC.Instance.esTipoX(pObjPedido.CodTipoDoc, "docValiZ"))
                {
                    if (objItem != null)
                    {
                        if (objItem.Material == null)
                        {
                            objItem.Material = MaterialBC.Instance.leerMaterial(objItem.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist);
                        }

                        if (!ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoCabCombo") && !ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoPosCombo"))
                        {
                            //------------------------------------------------------------------------------------------------------------------------
                            this._lvLstCentros = new List<GenericBE>();
                            this._lvLstAlmacenes = new List<GenericBE>();
                            this._lvLstLotes = new List<GenericBE>();

                            decimal pCantTot = pObjPedido.Detalle.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(objItem.Posicion))
                                                                        && (X.CodMaterial == objItem.CodMaterial)
                                                                        && (X.CodAlmacen == objItem.CodAlmacen)
                                                                        && (X.CodCentro == objItem.CodCentro)
                                                                        && (X.CodLote == objItem.CodLote)).Sum(Y => Y.Cantidad);
                            pCantTot += objItem.Cantidad;
                            this._lvLstCAL = ParametroBC.Instance.getDataLotes(objItem.Material.CodMaterial, pCantTot, objItem.CodCentro,
                                    objItem.CodAlmacen, objItem.CodLote, numPedidoModif, numPosModif, pObjPedido.OrgVentas, pObjPedido.CanalDist);
                            _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;

                            DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, _lvLstCAL, ref _lvLstCentros, ref _lvLstAlmacenes, ref _lvLstLotes);
                            //------------------------------------------------------------------------------------------------------------------------
                            if (pObjPedido.OrgVentas == "1000" && (pObjPedido.CodTipoDoc == "Z001" || pObjPedido.CodTipoDoc == "Z003")) //nueva logica solo para DECOR CENTER y estas 2 clases de documento
                            {
                                if (objItem.Material.TipoMaterial == "NA2" || objItem.Material.TipoMaterial == "NA3")
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (_lvLstLotes.Count > 1)
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                    //else
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                }
                                else if (objItem.Material.TipoMaterial == "NA" || objItem.Material.TipoMaterial == "NA1" || objItem.Material.TipoMaterial == "IM" || objItem.Material.TipoMaterial == "IM1")
                                {
                                    //objItem.TipoPosicion = "Z010";
                                }
                            }
                            else
                            {
                                //-- Si es NA2
                                if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA2"))
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (this._lvLstLotes.Count <= 1) // Si solo hay un lote, no hay stock (es el item que dice "ninguno")
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                    //else if (this._lvLstLotes.Count > 1)// && objItem.TipoPosicion == "ZE10")
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                }
                                else if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA3")) //-- NA3 siempre con ZE10 - Con o Sin Stock
                                {
                                    if (!objItem.TipoPosicion.Equals("Z010"))
                                    {
                                        //objItem.TipoPosicion = "ZE10";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        private PedidoBE addItemMaterial(PedidoBE objP)
        {
            foreach (DetalleBE itemD in objP.Detalle)
            {
                string retMsg = "";

                try
                {
                    List<DetalleBE> lstMateriales = (objP.Detalle == null) ? new List<DetalleBE>() : objP.Detalle;

                    DetalleBE objDetalle = new DetalleBE();
                    objDetalle.CodMaterial = itemD.CodMaterial;
                    objDetalle.Cantidad = itemD.Cantidad;

                    MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(itemD.CodMaterial, objP.OrgVentas, objP.CanalDist);

                    if (objMaterial != null)
                    {
                        objDetalle.DescMaterial = objMaterial.DescMaterial;
                        objDetalle.CodUMedida = objMaterial.CodUMedida;
                        objDetalle.Peso = objMaterial.Peso;
                        objDetalle.UMedidaRendimiendo = objMaterial.UMedidaRendimiendo;
                        objDetalle.ValorRendimiento = objMaterial.ValorRendimiento;
                        objDetalle.TipoMaterial = objMaterial.TipoMaterial;

                        objDetalle.Material = objMaterial;

                        //si UM = UNidad => redondear al entero mayor
                        if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                        {
                            objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                        }
                        //--- calcular rendimiento
                        if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                            ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                        {
                            objDetalle.Cantidad = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                        }

                        bool auxC = false;
                        //--- cargar data de prioridad de entrega en base a la cond de exp.
                        if (!string.IsNullOrEmpty(objP.CondExp) && !objP.CodTipoDoc.Equals("Z037"))
                        {
                            objDetalle.PrioridadEntrega = objP.CondExp;
                            auxC = true;
                        }
                        /*20110714 Inicio WCA  */
                        string canalesCondDesNor = ParametroBC.Instance.getParamValue("CondPriorDespNormal");
                        if (!string.IsNullOrEmpty(canalesCondDesNor))
                        {
                            string[] aCanalCond = canalesCondDesNor.Split(',');
                            for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                            {
                                if (aCanalCond[iCan].Equals(objP.CanalDist))
                                {
                                    objDetalle.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                                    break;
                                }
                            }

                        }
                        /*20110714 Fin  */
                        //--- cargar fecha de entrega
                        if (objP.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                        {
                            objDetalle.Repartos[0].FechaEntrega = objP.FechaEntrega;
                            auxC = true;
                        }
                        if (auxC)
                        {
                            this.calculaFechaEntregaItem(objDetalle, op);
                        }
                        objDetalle.Repartos[0].CantPed = objDetalle.Cantidad;
                        objDetalle.Repartos[0].CantConf = objDetalle.Cantidad;
                        //--- cálculo de posición
                        string tmpPos = "";
                        if (lstMateriales.Count > 0)
                        {
                            tmpPos = lstMateriales[lstMateriales.Count - 1].Posicion;
                        }
                        else
                        {
                            tmpPos = "00";
                        }
                        int posi = Convert.ToInt16(tmpPos) + 10;
                        Session["ultimaPosAdd"] = posi;
                        objDetalle.Posicion = posi.ToString();

                        lstMateriales.Add(objDetalle);

                        //--- validar si es un material Z004/Z001 combo/kit
                        if (ParametroBC.Instance.esTipoX(objMaterial.Tipo, "TipoMatCombo"))
                        {
                            //buscar materiales asociados y añadirlos
                            string pTipoPos = "";

                            List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(objP.CodTipoDoc, objMaterial.CodMaterial, objP.OrgVentas,
                                              objP.CanalDist, out pTipoPos);
                            objDetalle.TipoPosicion = pTipoPos.Equals("") ? objDetalle.TipoPosicion : pTipoPos;

                            //--- si tiene elementos, entonces es un KIT o Combo
                            foreach (DetalleBE item in lstDetalle)
                            {
                                item.DescMaterial = item.Material.DescMaterial;
                                item.CodUMedida = item.Material.CodUMedida;
                                item.Peso = item.Material.Peso;
                                item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                                item.ValorRendimiento = item.Material.ValorRendimiento;
                                item.TipoMaterial = item.Material.TipoMaterial;

                                posi += 10;
                                item.Posicion = posi.ToString();
                                item.PosSup = objDetalle.Posicion;

                                item.Cantidad = item.CantComp * objDetalle.Cantidad;
                                //si UM = UNidad => redondear al entero mayor
                                if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                                {
                                    item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                                }
                                //--------------------
                                if (item.Material == null)
                                {
                                    item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, objP.OrgVentas, objP.CanalDist);
                                }
                                //--- calcular rendimiento
                                if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                                    ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                                {
                                    item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento); //rgutierrez 15.11.2011
                                    //item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                                }

                                switch (objDetalle.TipoPosicion)
                                {
                                    case "Z011":
                                        item.TipoPosicion = "Z012";
                                        break;
                                    case "Z016":
                                        item.TipoPosicion = "Z017";
                                        break;
                                    case "Z007":
                                        item.TipoPosicion = "Z008";
                                        break;
                                    case "Z014":
                                        item.TipoPosicion = "Z015";
                                        break;
                                }

                                auxC = false;
                                //--- cargar data de prioridad de entrega en base a la cond de exp.
                                if (!string.IsNullOrEmpty(objP.CondExp))
                                {
                                    item.PrioridadEntrega = objP.CondExp;
                                    auxC = true;
                                }
                                /*20110714 Inicio WCA  */
                                if (!string.IsNullOrEmpty(canalesCondDesNor))
                                {
                                    string[] aCanalCond = canalesCondDesNor.Split(',');
                                    for (int iCan = 0; iCan < aCanalCond.Length; iCan++)
                                    {
                                        if (aCanalCond[iCan].Equals(objP.CanalDist))
                                        {
                                            item.PrioridadEntrega = ParametroBC.Instance.getParamValue("PriorDetReparto");
                                            break;
                                        }
                                    }

                                }
                                /*20110714 Fin  */

                                //--- cargar fecha de entrega
                                if (objP.FechaEntrega != objDetalle.Repartos[0].FechaEntrega)
                                {
                                    objDetalle.Repartos[0].FechaEntrega = objP.FechaEntrega;
                                    auxC = true;
                                }
                                if (auxC)
                                {
                                    calculaFechaEntregaItem(item, op);
                                }
                                objDetalle.Repartos[0].CantPed = item.Cantidad;
                                objDetalle.Repartos[0].CantConf = item.Cantidad;
                                //--- solo agregar los q no hayan sido agregados antes
                                lstMateriales.Add(item);
                            }
                        }
                        objP.Detalle = lstMateriales;
                    }
                    else
                    {
                        retMsg = "No se encontró el material.";
                    }
                }
                catch
                {
                    
                }
                
            }
            return objP;
        }

        private List<ClienteBE> GuardarClienteReniec(string pListaDatoCli, out string _mensajeExcepcion)
        {
            List<ClienteBE> listcliPregRespGuardar = new List<ClienteBE>();
            if (pListaDatoCli != null || pListaDatoCli != "")
            {
                ClienteBE cliente = JsonConvert.DeserializeObject<ClienteBE>(pListaDatoCli);
                Dictionary<string, string> lstTmp = JsonConvert.DeserializeObject<Dictionary<string, string>>(pListaDatoCli);
                if (lstTmp != null)
                {
                    cliente.P1 = lstTmp.ToList().Find(x => x.Key == "1").Value;
                    cliente.P10 = lstTmp.ToList().Find(x => x.Key == "10").Value;
                    cliente.P15 = lstTmp.ToList().Find(x => x.Key == "15").Value;
                    cliente.P20 = lstTmp.ToList().Find(x => x.Key == "20").Value;
                    cliente.P25 = lstTmp.ToList().Find(x => x.Key == "25").Value;
                    cliente.P30 = lstTmp.ToList().Find(x => x.Key == "30").Value;
                    cliente.P35 = lstTmp.ToList().Find(x => x.Key == "35").Value;
                    cliente.P40 = lstTmp.ToList().Find(x => x.Key == "40").Value;
                    cliente.P45 = lstTmp.ToList().Find(x => x.Key == "45").Value;
                    cliente.P50 = lstTmp.ToList().Find(x => x.Key == "50").Value;
                    cliente.P55 = lstTmp.ToList().Find(x => x.Key == "55").Value;

                    listcliPregRespGuardar = new List<ClienteBE>();
                    ClienteBE objcliPregRespGuardar = new ClienteBE();
                    ClienteBE objClienteR = new ClienteBE();
                    if (cliente != null)
                    {
                        List<ClientePreResBE> cliPregResp = ClienteBC.Instance.ListaPreguntas();
                        PropertyInfo[] infC = cliente.GetType().GetProperties();

                        Dictionary<string, string> dicCli = new Dictionary<string, string>();
                        DataTable dt = new DataTable();

                        foreach (PropertyInfo info in cliente.GetType().GetProperties())
                        {
                            dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
                        }

                        DataRow dr;
                        dr = dt.NewRow();
                        dr["CODIG"] = cliente.CODIG;
                        dr["APPAT"] = cliente.APPAT;
                        dr["APMAT"] = cliente.APMAT;
                        dr["NOMBRE"] = cliente.NOMBRE;
                        dr["FECNAC"] = cliente.FECNAC;
                        dr["GRAINS"] = cliente.GRAINS;
                        dr["SEXO"] = cliente.SEXO;
                        dr["CIUDAD"] = cliente.Ciudad;
                        dr["EDAD"] = cliente.EDAD;
                        dr["RANGOED"] = cliente.RANGOED;
                        dr["NIVELSE"] = cliente.NIVELSE;
                        dr["DIREC"] = cliente.DIREC;
                        dr["P1"] = cliente.P1;
                        dr["P10"] = cliente.P10;
                        dr["P15"] = cliente.P15;
                        dr["P20"] = cliente.P20;
                        dr["P25"] = cliente.P25;
                        dr["P30"] = cliente.P30;
                        dr["P35"] = cliente.P35;
                        dr["P40"] = cliente.P40;
                        dr["P45"] = cliente.P45;
                        dr["P50"] = cliente.P50;
                        dr["P55"] = cliente.P55;
                        dt.Rows.Add(dr);

                        foreach (PropertyInfo item in infC)
                        {
                            if (item.Name != null)
                            {
                                //string[] obj = item.Split(':');
                                //cliente
                                dicCli.Add(item.Name, dt.Rows[0][item.Name].ToString());
                            }
                        }

                        string result;
                        objClienteR = ClienteBC.Instance.busquedaClienteReniec(cliente.CODIG, cliente.NOMBRE, cliente.APPAT, cliente.APMAT, out mensajeExcepcion);

                        if (mensajeExcepcion == "")
                        {
                            //if (objClienteR.CODIG == null)
                            //{
                                ClienteBC.Instance.insertClienteReniec(cliente, out result);
                            //}

                            foreach (ClientePreResBE item in cliPregResp)
                            {
                                foreach (KeyValuePair<string, string> itemD in dicCli)
                                {
                                    
                                    //if (itemD.Value.Trim() != "")
                                    //{
                                        if (item.codPre == itemD.Key.Substring(1, itemD.Key.Length - 1))
                                        {
                                            objcliPregRespGuardar = new ClienteBE();
                                            objcliPregRespGuardar.CODIG = cliente.CODIG;
                                            objcliPregRespGuardar.CODP = itemD.Key.Substring(1, itemD.Key.Length - 1);
                                            objcliPregRespGuardar.CODR = itemD.Value;
                                            listcliPregRespGuardar.Add(objcliPregRespGuardar);
                                            break;
                                        }
                                    //}
                                }
                            }
                        }
                    }
                }
            }
            _mensajeExcepcion = mensajeExcepcion;
            return listcliPregRespGuardar;
        }

        private Dictionary<string, string> dictPregCli()
        {
            Dictionary<string, string> preg = new Dictionary<string, string>();
            preg.Add("1", "");
            preg.Add("10", "");
            preg.Add("15", "");
            preg.Add("20", "");
            preg.Add("25", "");
            preg.Add("30", "");
            preg.Add("35", "");
            preg.Add("40", "");
            preg.Add("45", "");
            preg.Add("50", "");
            return preg;
        }

        private List<ClienteBE> ValidaInterlocutorZ3(string prefixText, string numeroDoc, string numeroDeud)
        {
            List<ClienteBE> lstClientes = ClienteBC.Instance.busquedaCliente(prefixText, numeroDoc, numeroDeud);
            return lstClientes;
        }
    }
}
